<?php
/**
 * @copyright   Copyright(c) 2018
 * @author      tianjie
 * @link        http://www.tinphp.com/
 */

namespace tian;

use think\Template;

class Controller
{

    private $temp;

    protected $_vars = [];

    /**
     * action前执行的全局方法，可继承并重构
     */
    public function _before_action(): void
    {

    }

    /**
     * action后执行的全局方法,可继承并重构
     */
    public function _after_action(): void
    {

    }

    /**
     * 魔术方法
     */
    public function __call($name, $arguments): void
    {
        echo "error url 404";
    }


    /**
     * 系统初始化函数，主要初始化模板引擎，定义一些主要的全局模板路径
     * @param string $m 模块名称
     * @param string $c 控制器名称
     */
    public function _sys_init_action(string $m, string $c): void
    {
        $template = Config::get('template');

        if($template['is_open']){
			if(strtoupper($template['default'])==strtoupper('ThinkPHP')){
				//设置模板引擎参数
				$configTemp = [
					'view_path' => VIEW_PATH . $m . "/" . strtolower(toUnderLineName($c)) . '/',
					'cache_path' => TEMP_PATH,
				];
				$options = $configTemp + $template['options'];

				$this->temp = new Template();
				$this->temp->config($options);
			}else{
				//其他模板引擎
				echo "暂时只支持 think-template 模板引擎";
			}
		}
    }

    /**
     * 模板参数绑定
     * @param $name
     * @param null $value
     */
    public function assign($name, $value = null)
    {
        $this->_vars = \array_merge($this->_vars, \is_array($name) ? $name : [$name => $value]);
    }

    /**
     * 获取模板解析后的内容
     * @param String $tplName 模板名称
     * @param String|array $value 模板数据
     * @return String 模板解析后的内容
     */
    public function fetch(string $tplName, $value = [])
    {
        $value = \array_merge($this->_vars, $value);
        return $this->temp->fetch($tplName, $value);
    }

}
